" __  ____   __  _   ___     _____ __  __ ____   ____
"|  \/  \ \ / / | \ | \ \   / /_ _|  \/  |  _ \ / ___|
"| |\/| |\ V /  |  \| |\ \ / / | || |\/| | |_) | |
"| |  | | | |   | |\  | \ V /  | || |  | |  _ <| |___
"|_|  |_| |_|   |_| \_|  \_/  |___|_|  |_|_| \_\\____|


"=============================================================================="
"" 配置文件位置    ~/.config/nvim/init.vim
"" 注释：以 " 开头的部分是注释
"=============================================================================="

" [vim简明教程](https://www.cnblogs.com/harry335/p/5886405.html) 
" [安装使用配置 Neovim——配置](https://www.jianshu.com/p/c382222e5151)

" 自动动作配置

    " 让配置变更立即生效 
    "autocmd BufWritePost $MYVIMRC source $MYVIMRC 

    "启动时默认自动最大化gvim窗口
    "autocmd GUIEnter * simalt ~x

    " 打开自动定位到最后编辑的位置, 需要确认.viminfo当前用户可写
    if has("autocmd")
        au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
    endif

    "关闭最后一个文件编辑buffer窗口时，自动退出其余所有NERDTree、Quickfix窗口
    "autocmd BufEnter * if 0 == len(filter(range(1, winnr('$')), 'empty(getbufvar(winbufnr(v:val), "&bt"))')) | qa! | endif

    "关闭最后一个文件编辑buffer窗口时，打开 vim-project 面板(需要安装amiorin/vim-project插件)
    "autocmd BufEnter * if 0 == len(filter(range(1, winnr('$')), 'empty(getbufvar(winbufnr(v:val), "&bt"))')) | Welcome | endif
    
    "关闭最后一个文件编辑buffer窗口时，打开 Startify 面板(需要安装mhinz/vim-startify插件)
    autocmd BufEnter * if 0 == len(filter(range(1, winnr('$')), 'empty(getbufvar(winbufnr(v:val), "&bt"))')) | Startify | endif

    " set autochdir     " 自动切换到当前编辑的文件所在路径 会与NERDTree冲突
    " 手动切换到当前选中文件所在目录路径 :cd %:p:h
    nnoremap <leader>. :cd %:p:h<cr>

" 基础高亮配置
    " 延时禁用让Vim查找/替换后一段时间自动取消高亮，发生查找时自动开启
    " 当光标一段时间保持不动了，就禁用高亮
    autocmd cursorhold * set nohlsearch
    " 当输入查找命令时，再启用高亮
    noremap n :set hlsearch<cr>n
    noremap N :set hlsearch<cr>N
    noremap / :set hlsearch<cr>/
    noremap ? :set hlsearch<cr>?
    noremap * *:set hlsearch<cr>

    " 最近行显示高亮配置
    "set cursorline cursorcolumn    " 高亮最近行
    set cursorline nocursorcolumn  " 不高亮最近行
    au WinLeave * set nocursorline nocursorcolumn
    au WinEnter * set cursorline cursorcolumn

    " 查找结果高亮显示设置
    " 更多的CTERM颜色可以查阅：http://vim.wikia.com/wiki/Xterm256_color_names_for_console_Vim

    highlight Search ctermbg=yellow ctermfg=black 
    highlight IncSearch ctermbg=black ctermfg=yellow 
    highlight MatchParen cterm=underline ctermbg=NONE ctermfg=NONE


" 查找时大小写敏感配置
    set ignorecase                 " 设置默认进行大小写不敏感查找
    set smartcase                  " 如果有一个大写字母，则切换到大小写敏感查找


" 配置多语言环境,解决中文乱码问题

    set encoding=utf-8                                   " 内部使用的字符编码方式，包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。

    set fileencoding=utf-8                               " Vim 中当前编辑的文件的字符编码方式，Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。

    set fileencodings=utf-8,chinese,gbk,latin1,latin-1   " Vim 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式，并且将 fileencoding 设置为最终探测到的字符编码方式。

    "简写
    "set fencs=utf-8,gbk
    "set fencs=utf-8,gbk,utf-16,utf-32,ucs-bom "编码配置

    set termencoding=utf-8                               " 该选项代表输出到客户终端（Term）采用的编码类型,默认空值，也就是输出到终端时不进行编码转换



    "解决菜单乱码问题
    language messages zh_CN.utf-8  " vim提示信息乱码的解决

    " if has("win32")
    "     set fileencoding=chinese
    " else
    "     set fileencoding=utf-8
    " endif
    " "解决consle输出乱码问题
    " language messages zh_CN.utf-8
    "
    " if has("multi_byte")
    "     " UTF-8 编码
    "     set encoding=utf-8
    "     set termencoding=utf-8
    "     set formatoptions+=mM
    "     "set fencs=utf-8,gbk
    "     set fencs=utf-8,gbk,utf-16,utf-32,ucs-bom "编码配置
    "     if v:lang =~? '^/(zh/)/|/(ja/)/|/(ko/)'
    "         set ambiwidth=double
    "     endif
    "     if has("win32")
    "         source $VIMRUNTIME/delmenu.vim
    "         source $VIMRUNTIME/menu.vim
    "         language messages zh_CN.utf-8
    "     endif
    " else
    "     echoerr "Sorry, this version of (g)vim was not compiled with +multi_byte"
    " endif


" 基础窗口美化设置

    set nu                        " 可以在每一行的最前面显示行号啦！
    set relativenumber             " 行号以相对行数显示 
    " 让第一次进入文件的时候使用绝对行号，进入编辑模式再退出到normal模式时再显示相对行号
    augroup relative_numbser
        autocmd!
        autocmd WinEnter    * :set relativenumber   " 进入窗口时
        autocmd InsertEnter * :set norelativenumber " 插入模式进入时
        autocmd InsertLeave * :set relativenumber   " 离开插入模式时
        autocmd WinLeave    * :set norelativenumber " 窗口离开时
    augroup END

    " [参考资料 自定义命令 vim 事件](http://vimcdoc.sourceforge.net/doc/autocmd.html)
        " InsertEnter   " 开始插入模式前
        " InsertLeave   " 
        " WinEnter      " 进入其它窗口后
    "set list                      " 显示制表格^I、Windows换行符^M,Unix结尾符$
    "set nolist                    " 不显示制表格^I、结尾符$
    "set nowrap                    " 不自动换行    dont wrap lines
    set wrap                      " 自动换行    dont wrap lines

" 内在记录配置
    set history=1000             " 记录历史条数
    set laststatus=2             " 状态栏行数    use 2 lines for the status bar
    set backspace=2              " 允许将一行退格到上面一行的结尾

    set mouse=a                  " 所有模式下允许使用鼠标  use mouse in all modes
    set showcmd                  " 在状态栏显示命令状态    show typed command in status bar
    "set textwidth=79             " 文本宽度

    set noswapfile                " 禁止vim产生交换文件

    set mouse=a                    " 可以在buffer的任何地方使用鼠标（类似office中在工作区双击鼠标定位）

    syntax on                      " 进行语法检验，颜色显示。

    "set report=0                   " 通过使用: commands命令，告诉我们文件的哪一行被改变过
    set fillchars=vert:\ ,stl:\    " 在被分割的窗口间显示空白，便于阅读 ,stlnc:\(加了这个wm分割栏有)

    " :browse e -- 会打开一个文件浏览器让你选择要编辑的文件。 
    "    如果是终端中，则会打开netrw的文件浏览窗口； 如果是gvim，则会打开一个图形界面的浏览窗口。 
    "    实际上:browse后可以跟任何编辑文档的命令，如sp等。 用browse打开的起始目录可以由browsedir来设置：
    "set browsedir=last      " 用上次访问过的目录（默认）；
    "set browsedir=buffer    " 用当前文件所在目录；
    set browsedir=current    " 用当前工作目录；

"设置tab键输入变为4个空格
    "set shiftwidth=4
    "set softtabstop=4
    "set tabstop=4
    "set expandtab
    "set autoindent " 解释：set autoindent Tab键的宽度 当设置成 expandtab 时，缩进用空格来表示，noexpandtab 则是用制表符表示一个缩进。set softtabstop=4 set shiftwidth=4 Tab键的宽度

" 前缀键设置   <leader>键设置 前缀键默认为 " \ ” 
    " 使用:help <leader>命令，可以查看关于前缀键的更多信息
    " 参考资料[VIM学习笔记 前缀键(leader)](https://zhuanlan.zhihu.com/p/63626180)

    "将前缀键定义为逗号
    "let mapleader=","  
    " 将前缀键设置为空格键
    "let mapleader = "\<spacer"

    " term终端窗口配置（vim版本需要>8.0）
    ":term 

    " 重读 我的 vimrc 文件
    nnoremap <leader>sv :source $MYVIMRC<cr>

" 快捷键或命令配置
    "<F2>设置是否显示行号
    " nnoremap <silent> <F2> :set number!<CR>
    "nnoremap <Leader>sn :set number!<CR>
    nnoremap <Leader>sl :set list!<CR>
    nnoremap <Leader>sw :set wrap!<CR>
    " 空格打开关闭折叠
    " nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>

    " 命令映射
    " git-bash终端打开当前目录(自定义命令需要大写开头)
    :command Tzsh :term :/bin/zsh
    :command Tbash :term :/bin/bash

    "注：输入:command "列出所有的vim中用户自定义的命令列表


" 代码折叠相关说明与配置
    "set foldmethod=indent  " 设置成 indent 折叠方式（更多的缩进表示更高级别的折叠）
    "set foldcolumn=3       " 命令定义了左折叠栏的宽度，默认是0。该栏用“|”显示折叠层次。
    "set fdm=indent        "set foldmethod=indent的简写 
    " 确认折叠功能开启:set foldenable
    " ：set fdm?      " 参考当前的折叠模式
        " vim 提供 6中折叠方式(默认省缺下为manual手工定义折叠)
        "    manual            手工定义折叠
        "    indent            更多的缩进表示更高级别的折叠
        "    expr              用表达式来定义折叠
        "    syntax            用语法高亮来定义折叠
        "    diff              对没有更改的文本进行折叠
        "    marker            对文中的标志折叠

        " manual 模式  ( 手工定义折叠 ）它的命令是通用的，掌握了manual的基本命令，折叠也就差不多
            " za    切换折叠状态，
            " zc    关闭折叠，就是折叠起来，
            " zo    打开折叠，
            " zd    删除折叠，当a、c、d、o大写时，则动作是递归的。
            " zf    创建折叠是zf结合光标移动命令（将光标放在函数的开括号上，用zf%，可方便的将函数折起来）。
            " zr    减少折叠 也就是取消折叠吧标志也取消了
            " zm    折叠更多 
            " zM    减少到一个也不剩
            " zm    折叠更多
            " 举例说明：  
                "    把光标置于某一段落内，并命令模式下键入 zfap 你将会看到该段落被一行高亮的文本所代替。你已经创建一个折叠了。 zf 是个操作符，而 ap 是一个文本对象。
                "    你可以将 zf 操作符跟任何一个移动命令联用，为所经之处的文本创建一个折叠。 (如：zf56G，创建从当前行起到56行的代码折叠；)
                "    zf 也能在可视模式下使用。


        " indent 模式  ( 更多的缩进表示更高级别的折叠 ）
            "    zi      打开/关闭折叠
            "    zc      折叠
            "    zC      对所在范围内所有嵌套的折叠点进行折叠
            "    zo      展开折叠
            "    zO      对所在范围内所有嵌套的折叠点展开
            "    [z      到当前打开的折叠的开始处。
            "    ]z      到当前打开的折叠的末尾处。
            "    zj      向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
            "    zk      向上移动到前一折叠的结束处。关闭的折叠也被计入。
            "    注：使用时在缩进处输入命令，缩进处需要四个空格或一个Tab键的长度

        " marker模式    
            "需要用标计来标识代码的折叠，系统默认是{{{和}}}，最好不要改动之
            " zf  创建折叠，比如在marker方式下：
            "        zf56G，创建从当前行起到56行的代码折叠；
            "        10zf或10zf+或zf10↓，创建从当前行起到后10行的代码折叠。
            "        10zf-或zf10↑，创建从当前行起到之前10行的代码折叠。
            "        在括号处zf%，创建从当前行起到对应的匹配的括号上去（（），{}，[]，等）。
            " zd  删除 (delete) 在光标下的折叠。仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
            " zD  循环删除 (Delete) 光标下的折叠，即嵌套删除折叠。
            "     仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
            " zE  除去 (Eliminate) 窗口里“所有”的折叠。
            "     仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。

        " vim提供4种缩排，:set indenttype? (查看当前缩排)
        " indenttyep可为:
            " autoindent
            " smartindent
            " cindent
            " indentexpr
            " 其中，autoindent与vi的autoindent类似，smartindent则是对其做了点加强，

    " 注意，每一种折叠方式不兼容，即：你不能用expr又用marker方式。
    " > 参考资料
    " + [Vim 折叠](https://www.jianshu.com/p/16e0b822b682)
    " + [vim 中代码的折叠和打开](https://blog.csdn.net/woshicsdn7547/article/details/45364047)
    " + [vim的折叠、智慧缩排](https://blog.csdn.net/strategycn/article/details/7897895)

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""
"" 主题风格设置
""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 主题设置文件放在vim安装目录下 如：linux /usr/share/nvim/runtime/colors

    " 初始化时，优先使用molokai.vim,若不存在则根据时间选用白天主题和黑夜主题
    " if executable("molokai.vim")  " 注： 如果新版的gvim8.2 color w文件放在~/vimfile中这种写法检查不到该文件
    "    color molokai
    " else
    "    "echo "提示：未加载到molokai.vim主题文件"
    "    " color evening
    "    if exists("*strftime")
    "        "echo strftime("20%y/%m/%d %H:%M:%S")
    "        " 输出格式为 如 2020/02/11 00:51:53
    "        let hourvalue = strftime("%H")
    "        "echo  "提示:当前时间为：" hourvalue

    "        if hourvalue < 6
    "            "echo "提示:00:00点~06:00 ，设为夜间模式主题"
    "            color evening
    "        elseif hourvalue < 18
    "            "echo "提示: 0:00点~18:00 设为白日模式主题"
    "            color morning
    "        elseif hourvalue < 24
    "            "echo "提示:18:00点~24:00 ，设为夜间模式主题"
    "            color evening
    "        else
    "            echo "提示:其他情况，设为模式主题"
    "            color blue
    "        end
    "    else
    "        " echo "提示：不存在strftime 直接选择用黑夜模式"
    "        color blue
    "    endif
    " endif

    "color molokai

    " color colorsbox-greenish
    " color solarized
    " color vividchalk
    " color colorsbox-faff
    " color colorsbox-material
    " color colorsbox-stblue
    " color colorsbox-stbright
    " color colorsbox-steighties
    " color colorsbox-stnight
    " color desertEx
    " color gruvbox
    " color gocode                     " 主题色 黑白
    " color elmindreda                 " 主题色 蓝字
    " color phosphor                   " 主题色 绿字


"=============================================================================="
" -----------------------------------------------------------------------------
" 插件管理工具 vim-plug 
    " 安装：curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
    " 自动安装
    if empty(glob('~/.config/nvim/autoload/plug.vim'))
        silent !curl -flo ~/.config/nvim/autoload/plug.vim --create-dirs
                        \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
        autocmd vimenter * pluginstall --sync | source $myvimrc
    endif
    
    " 使用
        " :PlugInstall    " 安装
        " :PlugClean      " 清除
    
    " 配置
        call plug#begin('~/.config/nvim/plugged')
	        Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
	        Plug 'https://github.com/vim-scripts/fcitx.vim.git'
	        Plug 'vim-airline/vim-airline'
	        Plug 'vim-airline/vim-airline-themes'
	        Plug 'mbbill/undotree'                          " 撤销更改/撤销树插件 
	        Plug 'Xuyuanp/nerdtree-git-plugin'              " 树形目录-在 NERDTree中显示git信息插件
	        Plug 'airblade/vim-gitgutter'                   " git变化边栏显示插件
	        Plug 'tpope/vim-fugitive'                       " git命令封装插件
	        Plug 'Yggdroot/indentLine'                      " 缩进指示线插件

	        Plug 'vim-scripts/taglist.vim'                  " (类名、变量、函数)标签列表插件
	        Plug 'vim-scripts/TaskList.vim'                 " 当前文件中任务列表插件：列出TODO与FIXME等备注插件

	        Plug 'mhinz/vim-startify'                       " 开始引导页插件
	        "Plug 'amiorin/vim-project'                      " 工作空间管理
             
	        Plug 'MattesGroeger/vim-bookmarks'              " 书签管理插件

	        "Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
	        Plug 'junegunn/fzf'
	        Plug 'junegunn/fzf.vim',                        " 模糊搜索
                    
	        Plug 'mileszs/ack.vim'                          " 项目里全局搜索某个单词插件(比自带的vimgrep快) 【需要安装第三方搜索软件】
	        Plug 'jremmen/vim-ripgrep'                      " 同ack一样的文件内容搜索工具插件【需要安装第三方搜索软件】


	        Plug 'suan/vim-instant-markdown'                " markdown格式高亮插件

	        Plug 'scrooloose/nerdcommenter'                 " 代码注释插件
	        Plug 'ervandew/supertab'                        " 键入Tab键时具有上下文提示及补全功能

	        "Plug 'makerj/vim-pdf'                           " pdf文件阅读（需要依赖pdftotext  archlinux： sudo pacman -S  poppler-data 其他：安装poppler-utils试试）
	        "Plug 'francoiscabrol/ranger.vim'                " 文件管理器
	        "Plug 'rbgrouleff/bclose.vim'                    " ranger.vim nvim要求依赖 关闭buf
	        Plug 'skywind3000/vim-terminal-help'             " vim8.1的终端辅助插件
	        Plug 'skywind3000/quickmenu.vim'                 " 快捷键菜单插件
	        if has('nvim')
	            Plug 'Shougo/defx.nvim', { 'do': ':UpdateRemotePlugins' } " 需要vim或nvim支持python3.5以上
	        else
	            Plug 'Shougo/defx.nvim'
	            Plug 'roxma/nvim-yarp'                       " 需要vim或nvim支持python3.5以上
	            Plug 'roxma/vim-hug-neovim-rpc'
	        endif
        call plug#end()

"=============================================================================="
" -----------------------------------------------------------------------------
" 插件管理工具 Vundle

    " 安装：git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
        " " 自动安装
        " if empty(glob('~/.vim/bundle/Vundle.vim'))
        "    silent !git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
        "    autocmd vimenter * PluginInstall --sync | source $myvimrc
        " endif

    " 使用方法：
        " 如果想下载某个插件，比如自动缩进indentpython.vim插件，
        " 将Plugin 'vim-scripts/indentpython.vim'置于call vundle#begin()和call vundle#end()之间，
        "  保存配置后在vim中执行 :PluginInstall
        " 参考资料：[vim的插件管理器Vundle的使用](https://www.jianshu.com/p/c7ac15bc4883)
        "           [Vim 神器的打造方式](https://www.cnblogs.com/yangshunde/p/7775010.html)
        "           [vim Bundle基础使用](https://blog.csdn.net/qqstring/article/details/81511174)
        " :PluginInstall  " 执行安装
        " :PluginClean    " 清除

    " 该插件配置
       " " 设置加载插件目录
       " " set rtp+=~/.vim/
       " set rtp+=~/.vim/bundle/Vundle.vim
       " call vundle#begin()
       "  
       " " let Vundle manage Vundle, required
       " " github上的插件
       " Plugin 'VundleVim/Vundle.vim'

       " Plugin 'scrooloose/nerdtree'                      " 树形目录插件（其中的bookmaek书签可记录常用文件夹）
       " "Plugin 'jistr/vim-nerdtree-tabs'                 " 树形目录-标签页插件

       " Plugin 'Xuyuanp/nerdtree-git-plugin'              " 树形目录-在 NERDTree中显示git信息插件
       " Plugin 'airblade/vim-gitgutter'                   " git变化边栏显示插件
       " Plugin 'tpope/vim-fugitive'                       " git命令封装插件

       "     Plugin 'mhinz/vim-startify'                      " 开始引导页插件
       "     "Plugin 'amiorin/vim-project'                      " 工作空间管理/项目管理插件
       "     "Plugin ''                                        " 另一款工作空间管理/项目管理插件

       " "Plugin 'spolu/dwm.vim'                            " 平铺式窗口管理插件(nerdtree也会被移动掉)
       " 
       " "Plugin 'vim-scripts/winmanager'                   " NERDTree与TagList插件窗口管理软件 

       " Plugin 'mbbill/undotree'                          " 撤销更改/撤销树插件 

       " Plugin 'vim-airline/vim-airline'                  " 加强版状态栏插件
       " Plugin 'vim-airline/vim-airline-themes'           " 加强版状态栏主题插件
       " Plugin 'ryanoasis/vim-devicons'                   " NERDTree美化（需要安装相应字体）
       " Plugin 'tiagofumo/vim-nerdtree-syntax-highlight'  " NERDTree文件的额外语法和突出显示插件(根据文件类型显示不同的图标和颜色)


       " Plugin 'Yggdroot/indentLine'                      " 缩进指示线插件

       " Plugin 'vim-scripts/taglist.vim'                  " (类名、变量、函数)标签列表插件
       " Plugin 'vim-scripts/TaskList.vim'                 " 当前文件中任务列表插件：列出TODO与FIXME等备注插件

       " Plugin 'mileszs/ack.vim'                          " 项目里全局搜索某个单词插件(比自带的vimgrep快) 【需要安装第三方搜索软件】
       " Plugin 'suan/vim-instant-markdown'                " markdown格式高亮插件

       " Plugin 'scrooloose/nerdcommenter'                 " 代码注释插件
       " "Plugin 'vim-scripts/SuperTab'                     " 键入Tab键时具有上下文提示及补全功能
       " Plugin 'ervandew/supertab'                       " 键入Tab键时具有上下文提示及补全功能
       " "Plugin 'vim-syntastic/syntastic'                  " 语法检测插件
       " "Plugin 'jiangmiao/auto-pairs'                     " 简单的括号匹配插件
       " "Plugin 'LucHermitte/VimFold4C'                    " C语言语法折叠插件

       " "Plugin 'michaelHL/awesome-vim-colorschemes'       " 主题插件
       " Plugin 'makerj/vim-pdf'                            " pdf文件阅读（需要依赖pdftotext  archlinux： sudo pacman -S  poppler-data 其他：安装poppler-utils试试）
       " Plugin 'francoiscabrol/ranger.vim'                 " 文件管理工具ranger插件
       " " 来自于http://vim-scripts.org/vim/scripts.html的插件
       " " Plugin 'project'   " 另一款项目目录管理地址：http://www.vim.org/scripts/script.php?script_id=69

       " " 本地插件
       " " Plugin 'file:///home/gmarik/path/to/plugin'

       " " 有旧插件的情况下，下载新的插件并重命名以避免冲突
       " " Plugin 'ascenator/L9', {'name': 'newL9'}

       " " All of your Plugins must be added before the following line
       " call vundle#end()            " required
       " filetype plugin indent on    " required

" -----------------------------------------------------------------------------
" 快捷菜单插件 skywind3000/quickmenu.vim 配置

    " 使用说明

    " 配置
        " 允许显示命令行帮助（ H ），以及 cursorline （ L ）
        let g:quickmenu_options = "LH"

        " 清除当前目录中所有内容
        call g:quickmenu#reset()

        " 设置 打开：显示 /隐藏 该菜单面板快捷键
        "noremap <silent><F12> :call quickmenu#toggle(0)<cr>  " <F12> 键打开
        noremap <silent><space> :call quickmenu#toggle(0)<cr> " 空格键打开
        " 由井号开始的字符串表示一个分组
        " 分组1 : UI
        call g:quickmenu#append('# UI', '')
        call g:quickmenu#append('打开首页',               ':Startify',               '执行:Startify')
        call g:quickmenu#append('自动换行',               ':set wrap!',              '执行:set wrap! 快捷键 <leader>sw')
        call g:quickmenu#append('制表符换行符显隐',       ':set list!',              '执行:set list! 快捷键 <leader>sl')
        call g:quickmenu#append('目录树NERDTree',         ':NERDTReeToggle',         '执行:NERDTReeToggle')
        call g:quickmenu#append('撤销树Undotree',         ':UndotreeToggle',         '执行:UndotreeToggle')
        call g:quickmenu#append('标签列表Tlist',          ':TlistToggle',            '执行:TlistToggle')
        call g:quickmenu#append('任务标签列表Tasklist',   ':TaslistToggle',          '执行:TaslistToggle')
        call g:quickmenu#append('缩进指示线indentLine',   ':IndentLinesToggle',      '执行:IndentLinesToggle')

        " 分组2 : Git
        call g:quickmenu#append('# Git', '')
        call g:quickmenu#append('查看git日志',   ':Glog',   '执行:Glog')
        call g:quickmenu#append('查看git blame', ':Gblame', ':执行:Gblame')

        " 第三方软件打开
        call g:quickmenu#append('# 第三方软件预览', '')
        call g:quickmenu#append('chrome预览',   ':Chrome', '执行:Chrome')

	" 自定义函数
        call g:quickmenu#append('# 自定义函数', '')
        call g:quickmenu#append('复制当前文件目录地址到剪贴板',   ':call GetCurFilePath()', '执行: call GetCurFilePath()')
        
	" 帮助/助记
        call g:quickmenu#append('# 帮助/助记','')
        call g:quickmenu#append('底部打开命令窗口 快捷键Alt+=',':Term','执行快捷键，或用相关插件的配置Alt+=')
        call g:quickmenu#append('关闭Buff',':bd', '执行:bd')
    " > 参考资料
        " + [漂亮的 Vim 弹出菜单插件](https://www.v2ex.com/amp/t/376762) 
        " + [skywind3000/quickmenu.vim](https://github.com/skywind3000/quickmenu.vim)
	


" -----------------------------------------------------------------------------
" 缩进指示线插件 Yggdroot/indentLine 配置 

    " 使用说明
        " 默认Tab键是功能切换键
        " 可以定义一个快捷键
        map <C-i> :IndentLinesToggle<CR>
        " 注：
            " 上边的<C-i>表示Ctrl + i，而:IndentLinesToggle 表示对应的命令。
            " <CR>表示回车。

" -----------------------------------------------------------------------------
" 树形目录插件 scrooloose/nerdtree 配置

    " 使用说明
        "        ?   快速帮助文档
        "        o   打开一个目录或者打开文件，创建的是 buffer，也可以用来打开书签
        "        go  打开一个文件，但是光标仍然留在 NERDTree，创建的是 buffer
        "        t   打开一个文件，创建的是Tab，对书签同样生效
        "        T   打开一个文件，但是光标仍然留在 NERDTree，创建的是 Tab，对书签同样生效
        "        i   水平分割创建文件的窗口，创建的是 buffer
        "        gi  水平分割创建文件的窗口，但是光标仍然留在 NERDTree
        "        s   垂直分割创建文件的窗口，创建的是 buffer
        "        gs  和 gi，go 类似
        "        x   收起当前打开的目录
        "        X   收起所有打开的目录
        "        e   以文件管理的方式打开选中的目录
        "        r   刷新光标所在的目录
        "        R   刷新当前根路径
        "        p   小写，跳转到光标所在的上一级路径
        "        P   大写，跳转到当前根路径
        "        J   到第一个节点
        "        K   到最后一个节点
        "        I   显示隐藏文件
        "        m   显示文件操作菜单
        "        C   将根路径设置为光标所在的目录
        "        u       设置上级目录为根路径
        "        :tabc   关闭当前的 tab
        "        :tabo   关闭所有其他的 tab
        "        :tabp   前一个 tab
        "        :tabn   后一个 tab
        "        gT      前一个 tab
        "        gt      后一个 tab

    " 配置
        " 打开位置居左居右与初始化宽度配置设置（默认居左）
        " let NERDTreeWinPos = 'right'  "居右
        " let NERDTreeWinPos = 'left'   "居左
        " let g:netrw_winsize = 35

        "" 初始化时不打开nerd_tree窗口（默认不打开）
        " let g:nerdtree_tabs_open_on_gui_startup = 1 " 打开
        let g:nerdtree_tabs_open_on_gui_startup = 0   " 不打开

        " 显示行号
        let NERDTreeShowLineNumbers=1
        let NERDTreeAutoCenter=1
        " 是否显示隐藏文件
        let NERDTreeShowHidden=1
        " 设置宽度
        let NERDTreeWinSize=31
        " 在终端启动vim时，共享NERDTree
        let g:nerdtree_tabs_open_on_console_startup=1
        " 忽略一下文件的显示
        let NERDTreeIgnore=['\.pyc','\~$','\.swp']
        " 显示书签列表
        let NERDTreeShowBookmarks=1

        let g:NERDTreeDirArrowExpandable = '▸'
        let g:NERDTreeDirArrowCollapsible = '▾'

        " 开关树形目录的快捷键：
        map <C-n> :NERDTreeToggle<CR>   " Ctrl + n 开关
        map <F2> :NERDTreeToggle<CR>   " F2 开关
        " nmap <F6> :NERDTreeToggle<cr> " F6 开关
        noremap <Leader>ne :NERDTreeToggle<CR>

        " 注：
            " 上边的<C-n>表示Ctrl + n，而:NERDTreeToggle 表示对应的命令。
            " <CR>表示回车。

" -----------------------------------------------------------------------------
" 在 NERDTree 中显示 git 信息插件：nerdtree-git-plugin
    " 使用说明
        " 前提：安装 nerdtree 、需要安装相应字体才能完整使用
    
    " 配置（需安装相应字体才能完整使用）
        let g:NERDTreeShowIgnoredStatus = 1
        let g:NERDTreeIndicatorMapCustom = {
            \ "Modified"  : "✹",
            \ "Staged"    : "✚",
            \ "Untracked" : "✭",
            \ "Renamed"   : "➜",
            \ "Unmerged"  : "═",
            \ "Deleted"   : "✖",
            \ "Dirty"     : "✗",
            \ "Clean"     : "✔︎",
            \ 'Ignored'   : '☒',
            \ "Unknown"   : "?"
            \ }

" -----------------------------------------------------------------------------
" 标签列表插件 vim-scripts/taglist.vim

    " 使用说明，
        "    最常用的几个命令：
        "     可以用“:TlistOpen”打开taglist窗口，用“:TlistClose”关闭taglist窗口。或者使用“:TlistToggle”在打开和关闭间切换。
        "     :Tlist
        "     Ctrl + ]    " 把光标移到变量名或函数名上，然后按,直接跳到这个变量或函数定义的源文件中
        "     Ctrl+t      " 可以退回原来的地方
        "     Ctrl + o
        "     Ctrl + W W
        "     在taglist窗口中，可以使用下面的快捷键：
        "     <CR>                                   跳到光标下tag所定义的位置，用鼠标双击此tag功能也一样
        "     o                                      在一个新打开的窗口中显示光标下tag
        "     <Space>                                显示光标下tag的原型定义
        "     u                                      更新taglist窗口中的tag
        "     s                                      更改排序方式，在按名字排序和按出现顺序排序间切换
        "     x                                      taglist窗口放大和缩小，方便查看较长的tag
        "     +                                      打开一个折叠，同zo
        "     -                                      将tag折叠起来，同zc
        "     *                                      打开所有的折叠，同zR
        "     =                                      将所有tag折叠起来，同zM
        "     [[                                     跳到前一个文件
        "     ]]                                     跳到后一个文件
        "     q                                      关闭taglist窗口
        "     <F1>                                   显示帮助 
        "      rebuild_ctags                         -重建ctags索引    ctrl+t     ctrl+r      组合键
        "      navigate_to_definition                -跳转到函数定义   ctrl+t     ctrl+t
        "      jump_back                             -跳回             ctrl+t     ctrl+b
        "      jump_back to_last_modification        -跳转到上次修改处 ctrl+t     ctrl+m
        "      show_symbols                          -按函数索引查找   alt+s

    " 配置
        let Tlist_Use_Right_Window=1        "  1让窗口显示在右边，0的话就是显示在左边
        let Tlist_Show_One_File=0           "  让taglist可以同时展示多个文件的函数列表
        let Tlist_File_Fold_Auto_Close=1    "  非当前文件，函数列表折叠隐藏
        let Tlist_Exit_OnlyWindow=1         "  当taglist是最后一个分割窗口时，自动推出vim
        " 使用winmanager时，不使用快捷键
        nnoremap <silent> <F8> :TlistToggle<CR>
        noremap <Leader>tl :TlistToggle<CR>
        " 启动Vim后，自动打开taglist窗口。
        " 使用winmanager时，将自动打开窗口关闭
        " let Tlist_Auto_Open = 0

" -----------------------------------------------------------------------------
" 任务列表插件：列出TODO与FIXME等备注插件 vim-scripts/TaskList.vim

    " 使用方法，
        "      在 Normal 模式下，依次按下 , + t + d，任务列表出现在下面的 Preview 窗口中，可以选择对应的条目，按回车键跳转过去
        "      :TaskList

    " 配置
        let g:tlTokenList = ["FIXME","TODO", "HACK", "NOTE", "WARN", "MODIFY"]  " 任务列表搜索的标识符列表，默认是 'FIXME TODO XXX'. 搜索到得结果按照分组和出现顺序排列.
        let g:tlWindowPosition = 1                                              " 指定任务列表窗口打开位置，默认是窗口上方打开，1 窗口上方底部打开
        let g:tlRememberPosition = 1                                            " 默认是找到离光标当前行最近的标示符；如果设置为1，则任务插件下次打开时会恢复到上次关闭时的位置. 

        " 绑定快捷键，默认是 <Leader>t
        "nnoremap    ,td             :TaskList<CR>


" -----------------------------------------------------------------------------
" 项目里全局搜索某个单词插件  mileszs/ack.vim

    " 使用方法，
        "      :Ack xxx                 在项目里搜索xxx单词.
        "      :Ack! TODO               
        "      :Ack! 'TODO\|FIXME'      

    " 安装前提：需要安装ack
        "    windows: (1)下载并安装 Strawberry Perl 【地址（http://strawberryperl.com/）】
        "             (2). 创建一个目录 c:/tools_bin，并将该目录添加到系统 PATH 环境变量
        "             
        "             (3). 下载 ack 脚本 （http://betterthangrep.com/ack-standalone）
        "                   放到 c:/tools_bin/ack.pl
        "                 
        "             (4). 创建一个批处理文件 c:/tools_bin/ack.bat 内容如下:
        "                   @echo off
        "                   perl.exe c:/tools_bin/ack.pl %*
        "    linux: archlinux安装ack: sudo acman -S ack
        "
        "    mac:安装ack:brew install ack

        " let g:ackprg="ack// -H// --nocolor// --nogroup"
        " 
        " if executable('ag')
        "  let g:ackprg = 'ag --nogroup --nocolor --column'
        " endif


    " 配置
        " 创建，命令映射
        " :command Todo  Ack! 'TODO\|FIXME\|CHANGED\|BUG\|HACK'   " 此种写法Windows上会报错，目前一次只能匹配搜一个单词
        " :command Debug Ack! 'NOTE\|INFO\|IDEA'                  " 此种写法报错
        :command Todo Ack! TODO

        " 相关高亮配置
        " Vim里面会自动的高亮TODO、FIXME，但是不会高亮CHANGED这样的关键字，所以需要手动的来指定一下
        if has("autocmd")
            " Highlight TODO, FIXME, NOTE, etc.
            if v:version > 701
                autocmd Syntax * call matchadd('Todo', '\W\zs\(TODO\|FIXME\|CHANGED\|BUG\|HACK\)')
                autocmd Syntax * call matchadd('Debug', '\W\zs\(NOTE\|INFO\|IDEA\)')
            endif
        endif

" -----------------------------------------------------------------------------
" 模糊搜索 'junegunn/fzf.vim'、'junegunn/fzf' 

    " 安装前提：需要安装fzf
        "    windows: (1)下载并安装 （如：fzf-0.20.0-windows_amd64.zip）
        "             (2). 解压到一个目录下，如创建一个目录 c:/tools_bin/fzf-20.0-windows_amd64，并将该目录添加到系统 PATH 环境变量
        "                 
        "    linux: Archlinux安装fzf: sudo pacman -S fzf
        "
        "    mac:安装fzf:brew install fzf

    " 使用
        " :FZF                  当前文件夹文件搜索切换 
        " :Files                当前文件夹文件搜索切换
        " :Buffers              buffer文件搜索切换 
        " :BLines [QUERY]在当前buffer里查找包含某关键词的行
        " :Tags [QUERY]        以Tag查找 (ctags -R)"
        " :Marks
        " :Map                 映射键模糊查找       注 :map  :nmap 原始命令查看 映射配置
        " :Command             命令列表模糊查找     注 :command 查看命令列表
        " ...

    " 配置
        " 浮动配置(需要浮动支持 目前vim不支持 neovim支持)
        if has('nvim')
            " 让输入上方，搜索列表在下方
            let $FZF_DEFAULT_OPTS = '--layout=reverse'
       
            " 打开 fzf 的方式选择 floating window
            let g:fzf_layout = { 'window': 'call OpenFloatingWin()' }
       
            function! OpenFloatingWin()
                let height = &lines - 3
                let width = float2nr(&columns - (&columns * 2 / 10))
                let col = float2nr((&columns - width) / 2)
       
                " 设置浮动窗口打开的位置，大小等。
                " 这里的大小配置可能不是那么的 flexible 有继续改进的空间
                let opts = {
                    \ 'relative': 'editor',
                    \ 'row': height * 0.3,
                    \ 'col': col + 30,
                    \ 'width': width * 2 / 3,
                    \ 'height': height / 2
                    \ }
       
                let buf = nvim_create_buf(v:false, v:true)
                let win = nvim_open_win(buf, v:true, opts)
       
                " 设置浮动窗口高亮
                call setwinvar(win, '&winhl', 'Normal:Pmenu')
       
                setlocal
                    \ buftype=nofile
                    \ nobuflisted
                    \ bufhidden=hide
                    \ nonumber
                    \ norelativenumber
                    \ signcolumn=no
            endfunction
        endif
       " 与其他软件集成(如ack、Rg/ripgrep)配置


    " >参考资料
        " + [Windows下基于FZF的模糊查找器](https://mounui.com/301.html)
        " + [Github jeesse23/with](https://github.com/jesse23/with)
        " + [VIM与模糊搜索神器FZF的集成用法 - 从简单到高级](https://segmentfault.com/a/1190000016186540?utm_source=tag-newest)
        " + [使用 neovim 的浮动窗口让你再次爱上 fzf](https://blog.csdn.net/simple_the_best/article/details/89279909)

" -----------------------------------------------------------------------------
" 文件内容搜索 jremmen/vim-ripgrep

    " 安装前提：需要安装ripgrep
        "    windows: (1)下载并安装ripgrep （如：ripgrep-11.0.2-x86_64-pc-windows-msvc.zip）
        "             (2). 解压到一个目录下，如创建一个目录 c:/tools_bin/ripgrep-11.0.2-x86_64-pc-windows-msvc，并将该目录添加到系统 PATH 环境变量
        "                 
        "    linux: Archlinux安装ripgrep: sudo pacman -S ripgrep
        "
        "    mac:安装ripgrep:brew install ripgrep

    " 使用说明
        " :Rg  要查找的字符       
    " 配置
    
    " 参考资料 

" -----------------------------------------------------------------------------
" 代码注释插件 scrooloose/nerdcommenter

    " 使用方法：
        " # <leader>cc // 注释
        " # <leader>cm 只用一组符号注释
        " # <leader>cA 在行尾添加注释
        " # <leader>c$ /* 注释 */
        " # <leader>cs /* 块注释 */
        " # <leader>cy 注释并复制
        " # <leader>c<space> 注释/取消注释
        " # <leader>ca 切换　// 和 /* */
        " # <leader>cu 取消注释

    " 配置
        " let g:NERDSpaceDelims = 1
        " let g:NERDDefaultAlign = 'left'
        " let g:NERDCustomDelimiters = {
        "             \ 'javascript': { 'left': '//', 'leftAlt': '/**', 'rightAlt': '*/' },
        "             \ 'less': { 'left': '/**', 'right': '*/' }
        "         \ }

        " Add spaces after comment delimiters by default （默认情况下，在注释分隔符后添加空格）
        let g:NERDSpaceDelims = 1

        " Use compact syntax for prettified multi-line comments （对经过修饰的多行注释使用紧凑语法）
        let g:NERDCompactSexyComs = 1

        " Align line-wise comment delimiters flush left instead of following code indentation （按行对齐注释分隔符左对齐，而不是按代码缩进）
        let g:NERDDefaultAlign = 'left'

        " Set a language to use its alternate delimiters by default （将语言设置为默认情况下使用其备用分隔符）
        let g:NERDAltDelims_java = 1

        " Add your own custom formats or override the defaults（添加您自己的自定义格式或覆盖默认格式）
        let g:NERDCustomDelimiters = { 
                \ 'c': { 'left': '/**','right': '*/' },
                \ 'javascript': { 'left': '//', 'leftAlt': '/**', 'rightAlt': '*/' },
                \ 'less': { 'left': '/**', 'right': '*/' },
           \ }

        " Allow commenting and inverting empty lines (useful when commenting a region)(允许注释和反转空行（在注释区域时有用）)
        let g:NERDCommentEmptyLines = 1

        " Enable trimming of trailing whitespace when uncommenting (取消注释时启用尾随空白的修剪)
        let g:NERDTrimTrailingWhitespace = 1

        " Enable NERDCommenterToggle to check all selected lines is commented or not (启用NerdCommentToggle以检查所有选定行是否已注释)
        let g:NERDToggleCheckAllLines = 1

" -----------------------------------------------------------------------------
" 项目管理插件  amiorin/vim-project  配置

    "  使用说明
        "     配置法：在配置文件中增加记录（项目或文件）
        "     命令行下输入
        "     :Welcome                                       " 打开项目列表 即打开欢迎配置
        "     :ProjectPath .                                 " 将当前地址加入到项目列表中（退出gvim 不会保存）
        "     :ProjectPath ~ Home                            " 将家目录备注为 Home加入到项目列表中（退出gvim 不会保存）
        "     :Project 'C:\' ,'C盘'                           " 将家目录备注为 Home加入到项目列表中（退出gvim 不会保存）
        "     :File 'C:\README.txt','C盘自述文件'              " 将文件C:\README.txt目录备注'C盘自述文件加入到项目列表中
        "     :Callback 'C:\README.txt' ,'RemoveTextWidth'   " 用法暂待研究
        " 注：如果对应地址下实际不存在，则不会加到项目列表中

    " 配置
        "set rtp+=~/.vim/bundle/vim-project/

        "let g:project_enable_welcome = 0    " vim开始时就不打开面板页面  即,before call project#rc()
        "let g:project_enable_welcome = 1    " vim开始时就先打开面板页面
        "let g:project_use_nerdtree = 1      " 与NERDTree集成
        "let g:project_use_nerdtree = 0      " 不与NERDTree集成

        " 开启与NERDTree联动使用
        "let g:project_use_nerdtree = 1

        " 自定义开始路径该功能的开始的更目录值
        " call project#rc("~/Code")
        "call project#rc()                  " 默认为家目录 default starting path (the home directory)


        " 创建，命令映射
        ":command ProjectList call project#config#welcome()   " 打开项目列表


        " 文件夹地址书签列表
            " 系统配置文件目录
            " 当前用户家目录
            "Project  '~' ,                                   'Home'
            " 磁盘列表
            "Project  '/home' ,                                  'Home'
            "Project  '/mnt' ,                                   'mnt'

        " 文件地址书签列表（注：标签名需要不同，相同只显示最后一个）
            " 公共Vim配置文件
            "File     'C:\Program Files (x86)\Vim\_vimrc' ,   'PublicVimConfigFile'
            " 当前用户Vim配置文件
            "File     '~/.vimrc' ,                             'VimUserConfig'

        " Project  'gollum'
        " File     'gollum/ToDo.md'                       ,   'ToDo'
        " Callback 'gollum'                               ,    'RemoveTextWidth'

        " function! RemoveTextWidth(...) abort
        "   setlocal textwidth=0
        " endfunction
        " function! AddSpecToPath(tile) abort
        "   setlocal path+=spec
        " endfunction

" -----------------------------------------------------------------------------
" 另一款目录书签管理插件 project

" > 参考资料:
" + [士特啰嗦司机 vim project](https://www.cnblogs.com/clphp/p/5473209.html)
" + [vim的项目管理工具：project插件](https://blog.csdn.net/baidu_30000217/article/details/70945965)

" -----------------------------------------------------------------------------
" 撤销更改/撤销树插件  vim-undotree  配置

    " 使用说明
        " 命令模式下输入:UndotreeToggle 打开窗口，可看到当前文件在vim之前的更改记录

    " 打开快捷键设置
    nnoremap <F3> :UndotreeToggle<CR>       " F3 打开undotree面板
    noremap <Leader>ud :UndotreeToggle<CR> " \ud 打开undotree面板

    "配置undotree产生的文件存放位置设置
    set undodir=$HOME/.undodir
    set undofile
    if has("persistent_undo")
        set undodir=$HOME/.undodir
        set undofile
    endif"

    "undotree窗口布局颜样式选择（目前有4种）
    if !exists('g:undotree_WindowLayout')
      let g:undotree_WindowLayout = 3
    endif


" -----------------------------------------------------------------------------
" git变动边沿显示插件 gitgutter  配置
    " 说明
    " 可以显式地关闭和打开vim gitgutter（默认为打开）：
        " 使用：GitGutterDisable关闭
        " 启用：GitGutterEnable
        " 切换方式：GitGutterToggle。
     
    " 要切换每个缓冲区的vim gitguitter，请执行以下操作：
        " 使用：GitGutterBufferDisable关闭
        " 使用：GitGutterBufferEnable启用
        " 切换方式：GitGutterBufferToggle
     
    " 您可以打开和关闭标志（默认为打开）：
        " 启用：GitGutterSignsEnable
        " 禁用：GitGutterSignsDisable
        " 切换方式：GitGutterSignsToggle。
    
    " 并且可以打开和关闭线条突出显示（默认为关闭）：
        " 启用：GitGutterLineHighlightsEnable
        " 禁用：GitGutterLineHighlightsDisable
        " 切换方式：GitGutterLineHighlightsToggle。 

    " 在hunks变化间跳转
        " 跳转到下一个 hunk (change)位置 ]c
        " 跳转到上一个 hunk (change)位置 [c.
        " 自己配置上下调整快捷键方法：如]h [h
             " nmap ]h <Plug>(GitGutterNextHunk)
             " nmap [h <Plug>(GitGutterPrevHunk)	
        " 可以使用：GitGutterQuickFix将所有的hunk加载到quickfix列表中。注意，这会忽略缓冲区中任何未保存的更改。如果设置了选项g:gitguitter_use_location_list，则此命令将把hunk加载到当前窗口的位置列表中。
        "  当光标位于某个块中时，您可以放置或撤消该块：
             " 用<Leader>hs或
             " 用<Leader>hu撤消它。
             " 预览hunk，例如<Leader>hp；
             " 移到预览窗口，例如：wincmd P；

        " 最后，可以使用：GitGutterAll 强制vim gitguitter在所有可见缓冲区中更新其符号。
        " 使用:GitGutterFold命令折叠所有未更改的行，只留下可见的块。使用zr在一个大块上下展开3行上下文。 



    " 配置
        " let g:gitgutter_highlight_lines = 1    " 打开行高亮(所在行整个背景颜色也高亮) turn on line highlighting by default
        let g:gitgutter_highlight_linenrs = 1  " 打开行数高亮 turn on line number highlighting by default
        let g:gitgutter_max_signs = 1000       " 设置最大的更改数（默认值为500）
        " let g:gitgutter_signs = 0
        " let g:gitgutter_map_keys = 0  " 关闭所有的映射按键
        " let g:gitgutter_override_sign_column_highlight = 0
        let g:gitgutter_override_sign_column_highlight = 1
        " let g:gitgutter_preview_win_floating = 1
        " " autocmd BufWritePost * GitGutter
        " nnoremap <LEADER>gf :GitGutterFold<CR>
        " " nnoremap H :GitGutterPreviewHunk<CR>
        " " nnoremap <LEADER>g- :GitGutterPrevHunk<CR>
        " " nnoremap <LEADER>g= :GitGutterNextHunk<CR>
        " set foldtext=gitgutter#fold#foldtext()
        " function! GitStatus()
        "   let [a,m,r] = GitGutterGetHunkSummary()
        "   return printf('+%d ~%d -%d', a, m, r)
        " endfunction
        " set statusline+=%{GitStatus()}

" -----------------------------------------------------------------------------
" git命令封装插件 vim-fugitive  配置

    " 命令映射
    "nnoremap <Leader>gs :Gstatus<CR>
    "nnoremap <Leader>gd :Gdiff<CR>
    "nnoremap <Leader>gc :Gcommit -m""
    "nnoremap <Leader>gb :Gblame<CR>
    "nnoremap <Leader>gl :Glog
    "nnoremap <Leader>gp :Gpush<CR>
    "nnoremap <Leader>gpp :Gpull<CR>

" -----------------------------------------------------------------------------
" 状态栏主题插件 airline   配置
    " 使用说明
        " 需要安装第三方的字体，默认的字体库有些图标不支持导致乱码

    " 配置
        " 设置中文提示
        language messages zh_CN.utf-8 
        " 设置中文帮助
        set helplang=cn
        " 设置为双字宽显示，否则无法完整显示如:☆
        set ambiwidth=double
        " 总是显示状态栏 
        let laststatus = 2
        let g:airline_powerline_fonts = 1   " 使用powerline打过补丁的字体
        let g:airline_theme="dark"          " 设置主题
        " 开启tabline
        "打开tabline功能,方便查看Buffer和切换，这个功能比较不错"
        "还省去了minibufexpl插件，因为我习惯在1个Tab下用多个buffer"
        let g:airline#extensions#tabline#enabled = 1             
        "tabline中当前buffer两端的分隔字符
        let g:airline#extensions#tabline#left_sep = '><'          
        "tabline中未激活buffer两端的分隔字符
        let g:airline#extensions#tabline#left_alt_sep = '》《'      
        "tabline中buffer显示编号
        let g:airline#extensions#tabline#buffer_nr_show = 1      

        " 关闭状态显示空白符号计数,这个对我用处不大"
        "let g:airline#extensions#whitespace#enabled = 0
        "let g:airline#extensions#whitespace#symbol = '!'

        " 映射切换buffer的键位
        nnoremap [b :bp<CR>
        nnoremap ]b :bn<CR>
        " 设置字体 
        "set guifont=Powerline_Consolas\ 14     " (系统默认没有安装该字体需要自己下载安装 该字体似乎未支持文件图标)

" -----------------------------------------------------------------------------
" NERDTree美化插件 Nerdtree-devicons
    
    " 使用说明
        " 需要安装第三方的字体，默认的字体库有些图标不支持导致乱码

    " 配置
        " 设置字体 
        "set guifont=DroidSansMono\ Nerd\ Font\ 40       " (系统默认没有安装该字体需要自己下载安装 改字体支持文件图标)
        set guifont=Source\ Code\ Pro\ Bold\ 10       " (系统默认没有安装该字体需要自己下载安装 )

        "Can be enabled or disabled
        let g:webdevicons_enable_nerdtree = 1

        "whether or not to show the nerdtree brackets around flags
        let g:webdevicons_conceal_nerdtree_brackets = 1

        "adding to vim-airline's tabline
        let g:webdevicons_enable_airline_tabline = 1

        "adding to vim-airline's statusline
        let g:webdevicons_enable_airline_statusline = 1

        function! WebDevIconsGetFileTypeSymbol(...)
          return ''
        endfunction

        let g:WebDevIconsUnicodeDecorateFolderNodes = 1
        let g:DevIconsEnableFoldersOpenClose = 1

        if has('gui_running')
          let g:WebDevIconsNerdTreeAfterGlyphPadding = ''
        endif


" -----------------------------------------------------------------------------
" NERDTree文件的额外语法和突出显示插件(根据文件类型显示不同的图标和颜色) tiagofumo/vim-nerdtree-syntax-highlight'

    " 配置
        " 禁用突出显示
        let g:NERDTreeDisableFileExtensionHighlight = 1
        let g:NERDTreeDisableExactMatchHighlight = 1
        let g:NERDTreeDisablePatternMatchHighlight = 1

        "Highlight full name (not only icons). You need to add this if you don't have vim-devicons and want highlight.
        let g:NERDTreeFileExtensionHighlightFullName = 1
        let g:NERDTreeExactMatchHighlightFullName = 1
        let g:NERDTreePatternMatchHighlightFullName = 1

        "Highlight full name (not only icons). You need to add this if you don't have vim-devicons and want highlight.
        let g:NERDTreeHighlightFolders = 1

        "highlights the folder name
        let g:NERDTreeHighlightFoldersFullName = 1


        "let g:NERDTreeDisableFileExtensionHighlight = 1
        "let g:NERDTreeDisableExactMatchHighlight = 1
        "let g:NERDTreeDisablePatternMatchHighlight = 1

        " 使用精确匹配突出显示文件夹
        "let g:NERDTreeFileExtensionHighlightFullName = 1
        "let g:NERDTreeExactMatchHighlightFullName = 1
        "let g:NERDTreePatternMatchHighlightFullName = 1
        "let g:NERDTreeHighlightFolders = 1 " enables folder icon highlighting using exact match
        "let g:NERDTreeHighlightFoldersFullName = 1 " highlights the folder name
        "let g:NERDTreeExtensionHighlightColor = {} " this line is needed to avoid error

        " 自定义颜色
        let s:brown = "905532"
        let s:aqua =  "3AFFDB"
        let s:blue = "689FB6"
        let s:darkBlue = "44788E"
        let s:purple = "834F79"
        let s:lightPurple = "834F79"
        let s:red = "AE403F"
        let s:beige = "F5C06F"
        let s:yellow = "F09F17"
        let s:orange = "D4843E"
        let s:darkOrange = "F16529"
        let s:pink = "CB6F6F"
        let s:salmon = "EE6E73"
        let s:green = "8FAA54"
        let s:Turquoise = "40E0D0"
        let s:lightGreen = "31B53E"
        let s:white = "FFFFFF"
        let s:rspec_red = "FE405F"
        let s:git_orange = "F54D27"
        let s:gray = "808A87"

        let g:NERDTreeExtensionHighlightColor = {} " this line is needed to avoid error
        let g:NERDTreeExtensionHighlightColor['o'] = s:gray " sets the color of o files to blue
        let g:NERDTreeExtensionHighlightColor['h'] = s:blue " sets the color of h files to blue
        let g:NERDTreeExtensionHighlightColor['c'] = s:green " sets the color of c files to blue
        let g:NERDTreeExtensionHighlightColor['cpp'] = s:green " sets the color of cpp files to blue
        let g:NERDTreeExtensionHighlightColor['c++'] = s:green " sets the color of c++ files to blue

    " > 参考资料
        " + [vim-nerdtree-syntax-highlight, nerdtree文件的额外语法和突出显示](https://www.kutu66.com//GitHub/article_146348)
        " + [Vim的NerdTree插件](https://segmentfault.com/a/1190000015143474)
        " + [GVim配置一个漂亮的NerdTree](https://blog.csdn.net/qq_42475711/article/details/96730493)

" -----------------------------------------------------------------------------
" 使键入Tab键时具有上下文提示及补全功能插件  vim-scripts/SuperTab 配置

    " 配置
        let g:SuperTabDefaultCompletionType="<c-n>"
        let g:SuperTabContextDefaultCompletionType = "<c-n>"

" -----------------------------------------------------------------------------
" 使键入Tab键时具有上下文提示及补全功能插件  ervandew/supertab 配置
    " 说明
        " :help supertab         " 查看使用说明
        " :scriptnames           " 检查是否加载了supertab
        " :verbose imap <tab>    " 检查插入映射是否存在 与查看映射到的是什么
        " :verbose set paste?    " 确保没有在vimrc或其他地方启用粘贴选项
        " 输入一个或多个字符后按Tab键会有提示出现,在继续按Tab键会向下切换选项（vim  默认是 <C-p>打开，<C-n>向下切换选择）

    " 配置

        let g:SuperTabDefaultCompletionType = "<c-n>"
        let g:SuperTabContextDefaultCompletionType = "<c-n>"

" -----------------------------------------------------------------------------
" 插件  窗口插件管理 vim-script/winmanager  配置

    " 使用说明

    " 配置

        "let g:NERDTree_title='NERD Tree'
        "let g:winManagerWindowLayout='NERDTree|TagList'
        "function! NERDTree_Start()
        "    exec 'NERDTree'
        "endfunction

        "function! NERDTree_IsValid()
        "    return 1
        "endfunction

        " 绑定F3到winmanager
        "nmap <silent> <F3> :WMToggle<CR>
        " 与vim-project有冲突，切打开winmanager时会出现一个空buff
    " > 参考资料
        " + [vim使用winmanager整合nerd tree和taglist](https://www.cnblogs.com/heartchord/p/4912029.html)


" -----------------------------------------------------------------------------
" 平铺式窗口管理插件 spolu/dwm.vim 配置

    " 使用说明
        " Ctrl + n    " 创建一个新窗口并将其放置在主窗格中,并将所有以前的窗口堆叠在堆叠窗格中[S]
        " Ctrl + c    " 如果没有未保存的更改，关闭当前窗口，但不能关闭最后一个窗口
        " Ctrl + J    " 跳到下一个窗口（顺时针）
        " Ctrl + K    " 跳到上一个窗口（逆时针）
        " Ctrl + 空格 “聚焦当前窗口，即将其放置在主窗格中，并将所有其他窗口堆叠在堆叠窗格中


" -----------------------------------------------------------------------------
" 插件 francoiscabrol/ranger.vim 配置
    " 使用说明
        " :Ranger                       " open current file by default
        " :RangerCurrentFile            " Default Ranger behaviour
        " :RangerCurrentDirectory
        " :RangerWorkingDirectory
        "
        " " open always in new tabs
        " :RangerNewTab
        " :RangerCurrentFileNewTab
        " :RangerCurrentDirectoryNewTab
        " :RangerWorkingDirectoryNewTab
        "
        " " open tab, when existant or in new tab when not existant
        " :RangerCurrentFileExistingOrNewTab
        " :RangerCurrentDirectoryExistingOrNewTab
        " :RangerWorkingDirectoryExistingOrNewTab
    " 配置
        let g:NERDTreeHijackNetrw = 0  " add this line if you use NERDTree
        let g:ranger_replace_netrw = 1 " open ranger when vim open a directory
        
	map <leader>f :Ranger<CR>.
    " > 参考资料
        " + []()

" -----------------------------------------------------------------------------
" 插件  mhinz/vim-startify  配置

    " 使用说明

    " 配置
        "设置书签
        let g:startify_bookmarks            = [
                    \ '~/.config/nvim/init.vim',
                    \]

        "起始页显示的列表长度（是每个类型的数量,非总数）
        let g:startify_files_number = 6

        "自动加载session
        let g:startify_session_autoload = 1

        "过滤列表，支持正则表达式
        let g:startify_skiplist = [
               \ '^/tmp',
               \ ]

        "自定义Header和Footer
        let g:startify_custom_header = [
        \'         __  ____   __ __     _____ __  __ ____   ____  ',
        \'        |  \/  \ \ / / \ \   / /_ _|  \/  |  _ \ / ___| ',
        \'        | |\/| |\ V /   \ \ / / | || |\/| | |_) | |     ',
        \'        | |  | | | |     \ V /  | || |  | |  _ <| |___  ',
        \'        |_|  |_| |_|      \_/  |___|_|  |_|_| \_\\____| ',
        \]
        let g:startify_custom_footer = [
        \'        +---------------------------------------------+ ',
        \'        |     美妙人生的关键在于你能迷上什么东西!     | ',
        \'        +--------------------+------------------------+ ',
        \]

    " > 参考资料
        " + [Vim插件之startify](https://blog.csdn.net/demorngel/article/details/70911385)

" -----------------------------------------------------------------------------
" 书签可视化插件  MattesGroeger/vim-bookmarks  配置

    " 使用说明
        " 功能                                    快捷键          命令
        " 添加/删除书签(当前行)                     mm        :BookmarkToggle
        " 添加/编辑/删除当前行注释书签              mi        :BookmarkAnnotate <TEXT>
        " 跳转到当前 buffer 的下一个书签            mn        :BookmarkNext
        " 跳转到当前 buffer 的前一个书签            mp        :BookmarkPrev
        " 在 quickfix 窗口中列出所有书签(toggle)    ma        :BookmarkShowAll
        " 清除当前 buffer 内的所有书签              mc        :BookmarkClear
        " 清除所有 buffer 内的书签                  mx        :BookmarkClearAll
        " 保存书签到文件                                      :BookmarkSave <FILE_PATH>
        " 从文件加载书签                                      :BookmarkLoad <FILE_PATH>
    
    " 配置
        highlight BookmarkSign ctermbg=NONE ctermfg=160
        highlight BookmarkLine ctermbg=194 ctermfg=NONE
        let g:bookmark_sign = '♥'                     " 书签符号设置（默认⚑）
        "let g:bookmark_annotation_sign = '##'          " 注释(说明)书签符号(默认☰)
        "let g:bookmark_highlight_lines = 1             " 默认值为0(否)，是否高亮显示书签行
        "let g:bookmark_no_default_key_mappings = 1     " 默认值为0(否)，是否使用默认的快捷键
        let g:bookmark_center = 1                      " 默认值为0(否)，是否跳转后的书签行居中
        let g:bookmark_show_warning = 0                " 默认值为1(是)，删除所有书签时，是否显示警告信息
        let g:bookmark_highlight_lines = 1             " 默认值为0(否)，是否高亮书签行
        let g:bookmark_auto_close = 1                  " 默认值为0(否)，在 quickfix 窗口选中书签后，是否自动关闭 quickfix 窗口
        let g:bookmark_save_per_working_dir = 1        " 默认值为0(否)，是否针对工作目录保存书签
        let g:bookmark_auto_save = 0                   " 默认值为1(是)，是否自动保存书签
        "let g:bookmark_auto_save_file = '/bookmarks'   " 默认值为$HOME .’/.vim-bookmarks’,存储书签的文件(bookmark_save_per_working_dir开启后此配置将被忽略)


    " > 参考资料
        " + [Hacking Vim: bookmarks(06)](https://www.it610.com/article/5490884.htm)

" -----------------------------------------------------------------------------
" vim8.1内置终端辅助插件skywind3000/vim-terminal-help  配置
    " 内置终端也分 normal/insert 两种模式，正常终端操作，输入文字是 insert 模式，在 insert 模式中按 <c-\><c-N> 就可以切换到终端 normal 模式了，然后你可以像 vim buffer 一样正常的 hjkl 漫游，正常的滚屏，复制内容。弄完了以后再按 i/a 回到 insert 模式中接着输入终端命令。
    " 使用说明
        " 第一：提供一个 ALT+= 的快捷键可以像 vscode 的 CTRL+backtick 一样用来打开 /关闭终端窗口，不用每次输入 :terminal，同时新终端会把 shell 的工作目录初始化成你上面正在编辑的文件所在的目录，因为你大部分时候临时想搞点什么一般都是针对你当前正在编辑的文件来操作，那么初始化成当前文件的目录就避免了你每次打开终端再 cd 
        " ALT+= 在正下方打开终端，路径自动帮你定位到上面文件所在目录; 运行完了就再 ALT+= 把它收起来，整个流程十分顺畅。多次 ALT+= 不会无止境的打开新终端，只会复用已有的，而如果你再终端里输入了 exit 结束了 shell 进程，那么再次按 ALT+= 才会创建一个新的终端。
     
        " 第二：初始化了一组快捷键 ALT+SHIFT+hjkl 用来在终端窗口和其他窗口之间跳转，很多 vim 用户过去都习惯设置 CTRL+hjkl 来做窗口跳转

        " 第三：在终端内提供一个名叫 drop 的命令，当你在终端中突然想编辑某个文件，直接 drop xxx 命令就能通知到外层的 vim 来打开该文件了，，
        

    " 配置
        "let g:terminal_key " 配置默认的切换 terminal 的热键，默认Alt+=  ( ALT+等于号)。
        "let g:terminal_cwd " 配置 shell 启动时候的目录 ;0 是 vim 当前目录 1 是当前编辑文件的所在目录 2 是当前文件的项目目录（包含 .git/.svn 的父目录）
    " > 参考资料
        " + [Vim/NeoVim 内置终端调教记](https://www.v2ex.com/t/637112)

" -----------------------------------------------------------------------------
" xxx插件  xxxx  配置

    " 使用说明

    " 配置

    " > 参考资料
        " + []()

"=============================================================================="
" 自定义函数配置

""""""""""""  自定义函数: 切换工作空间
""""""""""""  

    "function Cw(dir)
    "    execute ":cd  ".a:dir
    "endfunction

    " 使用说明：
        " 命令模式下输入 ：call Cw(prj_2) 快速切换到项目空间(前提是在配置里定义了prj_2的路径)

    " 配置例子1：
        " let g:prj_1 = "~/Desktop/tmp/prj_1" 
        " let g:prj_2 = "~/Desktop/tmp/prj_2"
        " let g:WorkDir = "~/tmp"  "相对路径写法  意为当前用户下的tmp目录
        " call Cw(WorkDir)
    " 配置例子2：
        " let g:MyWorkSpace = "C:/MyWorkSpace"
        " let g:CodeStudio = g:MyWorkSpace."/GitHub_Prj/"
        " call Cw(CodeStudio)

    "" 实际配置：
        " let g:WorkDir = "D:\MyWorkSpace"
        " call Cw(WorkDir)



""""""""""""  自定义函数: 快速输入时间
""""""""""""  

    " --实现方案一, 然后在编辑文件时，在输入模式下，输入 xdate 或 xdatetime 后按回车，便可输入以下格式的时间：
        iab xdate <c-r>=strftime("20%y.%m.%d")<cr> 
        iab xdatetime <c-r>=strftime("20%y/%m/%d %H:%M:%S")<cr> 
        iab xdatetime1 <c-r>=strftime("20%y/%m/%d %H:%M:%S %p (%A) %z")<cr> 

    " --实现方案二, linux系统的命令模式下 :r !date 

    " > 参考资料
    " + [Vim技能修炼教程(15) - 时间和日期相关函数](https://www.jianshu.com/p/172982c0a5f4)

""""""""""""  自定义函数: 获取当前目录路径
""""""""""""  

    " 将当前编辑的文件完全路径拷贝到系统剪贴板 --实现方案一
        " function GetCurFilePath()
        "     let cur_dir=getcwd()
        "     let dir_filename=cur_dir."\\"
        "     echo dir_filename.expand("%:r")."         done"
        "     call setreg('+',dir_filename)
        " endfunction

    " 将当前编辑的文件完全路径拷贝到系统剪贴板  --实现方案二
        function GetCurFilePath()
            let cur_dir=getcwd()
            let cur_file_name=getreg('%')
            let dir_filename=cur_dir."\\".cur_file_name
            echo dir_filename."         done"
            call setreg('+',dir_filename)
        endfunction

    " 使用说明
        " 命令模式下输入 ：call GetCurFilePath() 快速获取当前路径

    "" 快捷键设置
    "nnoremap <silent> <F9> : call GetCurFilePath()<cr>


""""""""""""  自定义函数:设置只有在是PHP文件时，才启用PHP补全 函数
""""""""""""  

    " 前提
        " 1、 配置步骤：首先下载PHP函数列表文件，将该文件保存在目录 /etc/vim/下:
        " 2、 设置php函数列表文件地址（前提将php_funclist.txt文件放在 ~/php_funclist.txt ）

    " 设置在针对所有文件都启用了PHP补全
    " 将函数列表文件引入补全配置中
    " set dictionary-=/etc/vim/php_funclist.txt  dictionary+=/etc/vim/php_funclist.txt
    " set dictionary-='C:/Program Files (x86)/Vim/vimfiles/php_funclist.txt'  dictionary+='C:/Program Files (x86)/Vim/vimfiles/php_funclist.txt'

    " 设置只有在是PHP文件时，才启用PHP补全
    au FileType php call PHPFuncList()

    function PHPFuncList()
        set dictionary-=~/.vim/completion_dictionary/php_funclist.txt dictionary+=~/.vim/completion_dictionary/php_funclist.txt
        set complete-=k complete+=k
    endfunction

    " 使用方法
        " 进入vim编辑的时候，按下 (control+p)或者 ，就可以出现php的自动补全。

""""""""""""  自定义函数:打开当前文件所在位置的文件管理器窗口
""""""""""""  

    "功能：当前文件所在位置，同时不阻塞当前窗口。


    function OpenFileLocation()
        if ( expand("%") != "" )
            execute "!start explorer /select, %" 
        else
            execute "!start explorer /select, %:p:h"
        endif
    endfunction
    
    function OpenFolderWithApp(name)
    "function ViewInBrowser(name)
        let path = expand("%:p:h")
        echo "当前位置：" . path
        if has('win32') || has('win64') || has('win16') || has('win95')
            let l:browsers = {
                \"explorer":"explorer \/select, %:p:h",
                \"PowerShell":"powershell.exe -noexit -command Set-Location -literalPath  %:p:h",
                \"Git-Gui":"C:\\Program Files\\Git\\cmd\\git-gui.exe  --working-dir ",
                \"Git-Bash":"C:\\Program Files\\Git\\git-bash.exe --cd=%:p:h",
            \}
            
            "C:\Program Files\Git\cmd\git-gui.exe" "--working-dir" "%1"
            "powershell.exe -noexit -command Set-Location -literalPath '%V'
            "C:\Users\CodeRooster\AppData\Local\Programs\Microsoft VS Code\Code.exe" "%V"
            "C:\Program Files\Git\git-bash.exe" "--cd=%1"

            " 执行命令用相应程序打开文件
            execute "!start "l:browsers[a:name]
        else
            let l:browsers = {
                \"ranger":"source ranger",
            \}
            execute "silent !"  l:browsers[a:name] file
        endif
    endfunction
    " 快捷方式映射 
    map gb <ESC>:call OpenFileLocation()<CR>

    " 使用说明
        " 命令模式下 输入 gb 打开当前所在文件夹
    
    " 自定命令
    :command Open       :call OpenFolderWithApp("explorer")<cr>          " 用文件管理器打开
    :command PowerShell :call OpenFolderWithApp("PowerShell")<cr>        " 在PowerShell打开
    :command Gitbash    :call OpenFolderWithApp("Git-Bash")<cr>          " 用Git-Bash打开
    :command Gitgui     :call OpenFolderWithApp("Git-Gui")<cr>           " 用Git-Gui打开


""""""""""""  自定义函数:使用系统上的软件打开当前文件夹或文件，同时不阻塞当前窗口。
""""""""""""  

    " 功能：使用第三方软件快速打开当前文件或当前文件夹，同时不阻塞当前窗口。
        " 例： 日志实时查看 BareTailProfessional 打开文件
        "        chrome、firefox浏览器打开预览

    function ViewInBrowser(name)
        let file = expand("%:p")
        echo "当前文件：" . file
        let l:browsers = {
            \"gvim":"gvim",
            \"Chrome":"chromium",
            \"FireFox":"firefox",
            \"sublime_text3":"sublime-text",
            \"Typora":"typora",
        \}
        " 执行命令用相应程序打开文件
        "execute "!start "  l:browsers[a:name] file
        execute "silent !"  l:browsers[a:name] file
    endfunction

    " 前缀键命令映射
    nmap <leader>cr    :call ViewInBrowser("Chrome")<cr>      " 用谷歌浏览器大开 
    nmap <leader>ff    :call ViewInBrowser("FireFox")<cr>     " 用火狐浏览器打开
    nmap <leader>bt    :call ViewInBrowser("baretailpro")<cr> " 用日志文件实时查看软件器Baretailpro打开当前文件

    " 自定命令
    :command Gvim        :call ViewInBrowser("gvim")<cr>          " 用Gvim再打开

    :command Chrome      :call ViewInBrowser("Chrome")<cr>        " 用谷歌浏览器大开 
    :command Firefox     :call ViewInBrowser("FireFox")<cr>       " 用火狐浏览器打开
    :command Sublime     :call ViewInBrowser("sublime_text3")<cr> " 用sublime_text3打开当前文件
    :command Typora      :call ViewInBrowser("Typora")<cr>        " 用MarkDown编辑查看器Typora打开


    " >参考资料
        " + [VIM 浏览器预览插件](https://mikecoder.cn/post/190/)
        " + [笨方法学Vimscript](https://www.kancloud.cn/kancloud/learn-vimscript-the-hard-way/49291)"



"==============================================================================
"" 窗口打开第三方软件 
" Open up lazygit(需要安装lazygit)
" noremap \g :term lazygit<CR>
nnoremap <Leader>g :term lazygit<CR>
noremap <c-g> :tabe<CR>:-tabmove<CR>:term lazygit<CR>

"==============================================================================
"" 附：vim的 window 和 Linux 的区别    
    "" -----------------------------------------------------------------------------
    ""                    |                          区       别 
    "" -----------------------------------------------------------------------------
    ""      系统          |        windows        |        Linux
    "" -----------------------------------------------------------------------------
    ""      可视块        |        ctrl+q         |       crtl+v
    ""                    | 需要按住shift才能     |
    ""                    |        选择块         |
    "" -----------------------------------------------------------------------------
    "" 注释：由于windows下编程习惯了保存就ctrl+s，在vim下ctrl+s整个putty终端就死了，
    ""       原来ctrl+s在LINUX里是锁定屏幕的快捷键，解锁ctrl+q就可以了


" > 参考资料
